package kgame5.kengine {
import kgame5.k3d.core.camera.CameraBee;
import kgame5.k3d.core.obj3d.node3d.Node3D;
import kgame5.k3d.core.obj3d.node3d.impl.group3d.Group3D;
import kgame5.k3d.core.obj3d.node3d.impl.group3d.impl.World3D;
import kgame5.k3d.core.view3d.View3D;
import kgame5.k3d.pars.ParticlesManager;

import flash.utils.Dictionary;

/**
 * @author kk
 * TODO 这个还是需要手动添加层级结构
 */
public class GameView {
	
	//3D区域
	public var view3D:View3D;
	public var world:World3D;
	public var camera:CameraBee;
	
	//各个图层
	private var dict_layer:Dictionary;
	
	public function GameView(w:int,h:int,bDebugCamera:Boolean=true){
		
		//--3D区域
		view3D=new View3D(w,h,bDebugCamera);
		world=view3D.world;
		camera=view3D.camera;
	
	}
	
	//添加一个图层。设置此图层内部是否需要排序
	//用法是地面层，障碍物层，主层（玩家和障碍物）
	public function addLayer(layerID:int,layer:Group3D):void{
		dict_layer[layerID]=layer;
		world.addChild(layer);
	}
	
	//将md加入制定图层（分不同图层是为了性能考虑），如无图层将创建新图层
	public function addChild(md:Node3D,layerID:int):void{
		//T.p(this,"addChild",md,layerID);
		findLayer(layerID).addChild(md);
	}
	
	public function removeChild(md:Node3D):void{
		findLayer(md.layerID).removeChild(md);
	}
	
	private function findLayer(layerID:int):Group3D{
		var layer:Group3D=dict_layer[layerID];
//		if(layer==null){
//			layer=new FastGroup3D();
//			dict_layer[layerID]=layer;
//			world.addChild(layer);
//		}
		return layer;
	}
	
	//启动渲染
	public function start():void{
		
		dict_layer=new Dictionary();
		
		world.removeAllChild();
	}
	
	//停止渲染，清除
	public function clear():void{
		
		//--粒子系统的 清除.粒子系统是个独立系统，不需要在pureMvc体系内
		ParticlesManager.getInstance().clear();
		
		//--清除world里的child
		world.removeAllChild();
	}
	
	//启动一下震动
	public function startShake():void{
		view3D.startShake(2, 4);//只有炮弹爆炸屏幕震动小
	}
	
	//
	public function update():void{
		
		//--粒子系统的运动
		ParticlesManager.getInstance().update();
		
		//--渲染到屏幕
		view3D.render();
	}

	////世界的长和宽，x+和z-,世界如果是个方块，则原点在左上角
	public function initCamera(mapWidth:int,mapHeight:int,panRadius:int,cameraY:int):void{
		//TODO 如何设置摄像机的还没做好
	
		//焦点固定
		camera.target.fill(mapWidth/2, 0, -mapHeight/2);
		// 摄像机固定
		camera.radius = 900;//C.CAMERA_RADIUAS;
		camera.pan=180;
		camera.y = 900;//C.CAMERA_Y;
	}
}//end of class
}
//////////////////////////////////////////////
////让摄像机盯住某人
//	public function setFocusPlayer(hardVO:HardVO):void{
//		if(SettingVO.fixCamera) {
//			return;
//		}
//
//		camera.target= hardVO.v3d_p;
//	}
////世界的长和宽，x+和z-,世界如果是个方块，则原点在左上角
//	private function initCamera(mapWidth:int,mapHeight:int,panRadius:int,cameraY:int):void{
//		//TODO 如何设置摄像机的还没做好
//	
//		//焦点固定
//		camera.target.fill(mapWidth/2, 0, -mapHeight/2);
//		// 摄像机固定
//		camera.radius = 900;//C.CAMERA_RADIUAS;
//		camera.pan=180;
//		camera.y = 900;//C.CAMERA_Y;
//	}